import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sports_new/controller/navigation_logic.dart';
import 'package:sports_new/controller/match/list/lq_match_filter_logic.dart';
import 'package:sports_new/controller/match/list/lq_view_logic.dart';
import 'package:sports_new/controller/match/list/match_page_logic.dart';
import 'package:sports_new/resources/colours.dart';
import 'package:sports_new/resources/styles.dart';
import 'package:sports_new/utils/constant.dart';
import 'package:sports_new/utils/utils.dart';
import 'package:sports_new/view/loading/loading_match_list.dart';
import 'package:sports_new/view/match/basketball/lq_match_cell.dart';
import 'package:sports_new/view/match/match_filter_float_widget.dart';
import 'package:sports_new/widgets/loading/loading_widget.dart';
import 'package:sports_new/widgets/loading/no_data_widget.dart';
import 'package:visibility_detector/visibility_detector.dart';

import '../../../utils/sp_utils.dart';
import '../../../widgets/ads_label.dart';
import '../../../widgets/header_delegate.dart';

class LqAllView extends StatefulWidget {
  const LqAllView({super.key});

  @override
  State<LqAllView> createState() => _LqAllViewState();
}

class _LqAllViewState extends State<LqAllView> {
  final logic = Get.put(
      LqViewLogic(LqMatchType.all, Constant.matchFilterTagAll),
      tag: Constant.matchFilterTagAll,permanent: true);

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    PrimaryScrollController.of(context).addListener(didScroll);
  }

  @override
  void deactivate() {
    PrimaryScrollController.of(context).removeListener(didScroll);
    super.deactivate();
  }

  @override
  Widget build(BuildContext context) {
    return GetBuilder<LqViewLogic>(
      tag: Constant.matchFilterTagAll,
      builder: (_) {
        return VisibilityDetector(
          key: const Key('all'),
          onVisibilityChanged: (VisibilityInfo info) {
            if(info.visibleBounds.isEmpty && logic.groupMatchList != null) {
              logic.getMatch();
            }
          },
          child: Stack(
            alignment: Alignment.center,
            children: [
              EasyRefresh.builder(
                controller: logic.refreshC,
                header: Styles.refreshHeader(position: IndicatorPosition.locator),
                onRefresh: () async {
                  Utils.onEvent('bspd_sx');
                  await logic.getMatch();
                },
                childBuilder: (BuildContext context, ScrollPhysics physics) =>
                CustomScrollView(
                    physics: physics,
                    slivers: [
                    const HeaderLocator.sliver(),
                    if(SpUtils.matchLqAds?[0].hasValue == false ||
                        DateTime.now().difference(DateTime.parse(SpUtils.matchLqAds![0])).inHours > 24)
                      SliverToBoxAdapter(
                        child: AdsLabel(
                          adsTag: "match_lq_全部",
                          close: 0,
                          tapType: 'match_advertising',
                          tagParam: "全部",
                          margin: const EdgeInsets.fromLTRB(8, 8, 8, 0),
                          onClose: () => setState(() {}),
                        ),
                      ),
                    LoadingWidget<int>(
                      data: logic.groupMatchList?.length ?? 0,
                      isLoading: logic.firstLoad,
                      loading: const LoadingMatchList.sliver(sportsId: 2),
                      noData: NoDataWidget.sliver(
                        tip: logic.quickFilter == QuickFilter.yiji
                            ? '暂无一级比赛'
                            : (logic.quickFilter == QuickFilter.jingcai
                            ? '暂无竞篮比赛'
                            : '暂无比赛'),
                      ),
                      child: () => const SliverToBoxAdapter(),
                    ),
                    if((logic.groupMatchList?.length ?? 0) > 0)
                      ...List.generate(
                        logic.dayList?.length ?? 0,
                          (index) => SliverMainAxisGroup(
                          slivers: [
                            SliverPersistentHeader(
                              pinned: true,
                              delegate: HeaderDelegate(
                                extent: 28,
                                child: Styles.matchListGroupHeader(logic.dayList![index])
                              )
                            ),
                            SliverList(
                              delegate: SliverChildBuilderDelegate(
                                childCount: logic.groupMatchList?[index].length ?? 0,
                                (context, i) => LqMatchCell(logic.groupMatchList![index][i])
                              )
                            )
                          ]
                        )
                      ),
                      SliverToBoxAdapter(
                        child: Container(height: 80),
                      )
                  ],
                )
              ),
              Positioned(
                  bottom: 40,
                  child: MatchFilterFloatWidget(
                    1,
                    logic.firstLoad,
                    logic.quickFilter,
                    onTap: (index) {
                      logic.onSelectMatchType(index);
                    },
                  )),
              Styles.matchListBottomBar(
                  logic.hideMatchNum != 0 && !logic.isBottomHide,
                  logic.hideMatchNum, onClose: () {
                Utils.onEvent('bspd_sxfc_gb');
                logic.onCloseBottomBar();
              }, onDefault: () {
                Utils.onEvent('bspd_sxfc_hf');
                logic.onSelectDefaultMatch();
              })
            ],
          ),
        );
      },
    );
  }

  didScroll() {
    Get.find<NavigationLogic>().onMatchPageScroll();
  }
}
